package com.ldn.server.mqtt.listener;

import com.ldn.server.mqtt.covert.MqttCovert;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.dromara.mica.mqtt.core.server.event.IMqttConnectStatusListener;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.tio.core.ChannelContext;

/**
 * MQTT连接状态监听器
 *
 * @author 李大牛家的牛 (scafel@163.com)
 * @product serverless
 * @className ConnectStatusListener
 * @createDate 2025/2/8 - 16:33
 * @description MQTT连接状态监听器
 **/
@Slf4j
@Service
public class ConnectStatusListener implements IMqttConnectStatusListener {

    @Resource
    private ApplicationContext applicationContext;

    /**
     * 监听客户端链接上线 连接成功
     * <p>客户端上线后将上线信息保存到数据库并发送上线通知消息</p>
     *
     * @param context 网络链接消息上下文
     * @param clientId 客户端ID
     * @param username 客户端登录用户名
     */
    @Override
    public void online(ChannelContext context, String clientId, String username) {
        MqttCovert covert = applicationContext.getBean(MqttCovert.class);
        covert.online(context, clientId, username);
    }

    /**
     * 监听客户端链接离线
     * <p>客户端离线后将离线信息保存到数据库并发送离线通知消息</p>
     *
     * @param context 网络链接消息上下文
     * @param clientId 客户端ID
     * @param username 客户端登录用户名
     * @param reason 离线遗嘱消息
     */
    @Override
    public void offline(ChannelContext context, String clientId, String username, String reason) {
        MqttCovert covert = applicationContext.getBean(MqttCovert.class);
        covert.offline(context, clientId, username, reason);
    }
}
